package Week6;

import java.util.*;

public class Day31 {
}

//牛客:小红的口罩
class Main1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt() , k = in.nextInt();
        PriorityQueue<Integer> q = new PriorityQueue<>();
        for(int i = 0; i < n; i++){
            int x = in.nextInt();
            q.offer(x);
        }
        int sum = 0 , count = 0;
        while(true){
            int t = q.poll();
            sum += t;
            count++;
            q.offer(t * 2);
            if(sum > k){
                System.out.println(count - 1);
                break;
            }
        }
    }
}

//牛客:春游
class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        while(t-- != 0){
            long n = in.nextLong() , a = in.nextLong() ,  b = in.nextLong();
            long ret = 0;
            if(n <= 2){
                ret = Math.min(a , b);
            }else{
                //双人人船单个人的票价为 a/2 , 三人船单个人的票价为 a/3, 此时我们要判断哪个床更合适，我们可以利用交叉相乘的方式来判断
                //因为我们3个双人船和2个三人船所能坐的人数是相等的，此时我吗就可以根据得到的票价进行怕判断了
                if(3 * a < 2 * b){
                    ret += n / 2 * a;
                    n %= 2;
                    if(n == 1){
                        //如果还剩下1人我们可以让他自己坐一个船，那么我们只需要判断哪个票价低即可
                        //但是我们还有一种情况，就我们取出一个双人人船和最后一人组成一个三人船，此时让我们需要的票价就是三人船的票价减去一个双人船的票价
                        ret += Math.min(Math.min(a , b) , b - a);
                    }
                }else{
                    ret += n / 3 * b;
                    n %= 3;
                    //剩1人，取出1个三人船(4人)，同时需要2个双人船
                    if(n == 1) ret += Math.min(Math.min(a , b) , 2 * a - b);
                    //剩2人，取出1个三人船(5人)，同时需要3个双人船
                    if(n == 2) ret += Math.min(Math.min(a , b) , 3 * a - b);
                }
            }
            System.out.println(ret);
        }
    }
}


//牛客:DP59 数位染色
class Main3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x = in.nextLong();
        int[] arr = new int[20];
        int sum = 0 , n = 0;
        while(x != 0){
            int t = (int)(x % 10);
            arr[n++] = t;
            sum += t;
            x /= 10;
        }

        if(sum % 2 != 0){
            System.out.println("No");
        }else{
            sum /= 2;
            boolean[] dp = new boolean[sum + 1];
            dp[0] = true;
            for(int i = 0; i <  n; i++){
                for(int j = sum; j >= arr[i]; j--){
                    dp[j] = dp[j] || dp[j - arr[i]];
                }
            }
            if(dp[sum]){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
        }
    }
}